/*
 * Especializacao em Engenharia de Software
 * Projeto e Implementacao Orientado a Objetos
 * Projeto SGCT - Grupo 5 
 */
package inf319.sgct;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.List;

/**
 * Esta classe representa as sessoes (eventos das conferencias) mantidas pelo
 * sistema.
 */
public class Sessao
{
    private static int contSessoes = 1;
    private int codigoSessao;
    private GregorianCalendar horario;
    private Trabalho trabalho;
    private int vagasDisponiveis;
    private Sala sala;
    private List<Equipamento> equipamentos = new ArrayList<Equipamento>();

    /**
     * Construtor usado para criacao de uma nova sessao.
     */
    public Sessao(GregorianCalendar horario, Trabalho trabalho,
        int vagasDisponiveis, Sala sala) {
        this.codigoSessao = contSessoes++;
        this.vagasDisponiveis = vagasDisponiveis;
        this.horario = horario;
        this.sala = sala;
        this.trabalho = trabalho;
    }

    /**
     * Aloca um equipamento para esta sessao. O equipamento alocado deve
     * pertencer a sala onde a sessao sera realizada.
     * O metodo retorna {@code true} se o equipamento foi alocado e
     * {@code false} caso contrario. 
     */
    public boolean addEquipamento(Equipamento equipamento) {
        if (this.sala.getEquipamentos().contains(equipamento)) {
            return this.equipamentos.add(equipamento);
        }
        else {
            System.err.print("Equipamento nao disponivel na sala reservada.");
            return false;
        }
    }

    /**
     * Retorna uma representacao textual desta sessao.
     */
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("Sessao: " + codigoSessao);
        SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy, HH:mm");
        builder.append("\nHorario: " + formatter.format(horario.getTime()));
        builder.append("\nTrabalho: " + trabalho.getTitulo());
        builder.append("\nApresentador: " + trabalho.getApresentador().getNome());
        builder.append("\nVagas: " + vagasDisponiveis);
        builder.append("\nSala: " + sala);
        builder.append("\n\n");
        return builder.toString();
    }

    /*--*--*-- Getters e Setters --*--*--*/

    public int getCodigoSessao() {
        return codigoSessao;
    }

    public GregorianCalendar getHorario() {
        return horario;
    }

    public void setHorario(GregorianCalendar horario) {
        this.horario = horario;
    }

    public Trabalho getTrabalho() {
        return trabalho;
    }

    public void setTrabalho(Trabalho trabalho) {
        this.trabalho = trabalho;
    }

    public int getVagasDisponiveis() {
        return vagasDisponiveis;
    }

    public void setVagasDisponiveis(int vagasDisponiveis) {
        this.vagasDisponiveis = vagasDisponiveis;
    }

    public Sala getSala() {
        return sala;
    }

    public void setSala(Sala sala) {
        this.sala = sala;
    }
}
